import js from '@eslint/js'
import pluginVue from 'eslint-plugin-vue'
import globals from 'globals'

export default [
  // 全局配置
  {
    languageOptions: {
      globals: {
        ...globals.browser,
        ...globals.es2021,
        ...globals.node
      },
      ecmaVersion: 'latest',
      sourceType: 'module'
    }
  },

  // JavaScript 推荐规则
  js.configs.recommended,

  // TypeScript 配置
  ...tseslint.configs.recommended,

  // Vue 插件配置
  ...pluginVue.configs['flat/recommended'],

  // 自定义规则
  {
    files: ['**/*.{js,ts,vue}'],
    rules: {
      // Vue 相关规则
      'vue/multi-word-component-names': 'off', // 允许多单词组件名
      'vue/no-unused-vars': 'warn',
      'vue/no-unused-components': 'warn',
      'vue/html-self-closing': ['error', {
        html: {
          void: 'never',
          normal: 'always',
          component: 'always'
        },
        svg: 'always',
        math: 'always'
      }],
      'vue/html-closing-bracket-newline': ['error', {
        singleline: 'never',
        multiline: 'never'
      }],
      'vue/singleline-html-element-content-newline': 'off',
      'vue/multiline-html-element-content-newline': 'off',
      'vue/max-attributes-per-line': ['error', {
        singleline: 3,
        multiline: 1
      }],

      // JavaScript 规则
      'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
      'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
      'no-unused-vars': 'warn',
      'no-undef': 'error',
      'semi': ['error', 'never'], // 不使用分号
      'quotes': ['error', 'single'], // 使用单引号
      'comma-dangle': ['error', 'never'], // 不允许尾随逗号
      'indent': ['error', 2], // 2个空格缩进
      'space-before-function-paren': ['error', 'always'], // 函数括号前需要空格
      'keyword-spacing': 'error', // 关键字前后需要空格
      'space-infix-ops': 'error', // 操作符前后需要空格
      'eol-last': 'error', // 文件末尾需要换行
      'no-trailing-spaces': 'error', // 不允许行尾空格
      'object-curly-spacing': ['error', 'always'], // 对象花括号内需要空格
      'array-bracket-spacing': ['error', 'never'], // 数组方括号内不需要空格
      'key-spacing': ['error', { beforeColon: false, afterColon: true }], // 对象键值对格式
      'comma-spacing': ['error', { before: false, after: true }], // 逗号格式
      'brace-style': ['error', '1tbs'], // 大括号风格
      'no-multiple-empty-lines': ['error', { max: 1 }], // 最大连续空行数

      // 最佳实践
      'eqeqeq': 'error', // 必须使用 === 和 !==
      'no-var': 'error', // 不允许使用 var
      'prefer-const': 'error', // 推荐使用 const
      'no-unused-expressions': 'error', // 不允许未使用的表达式
      'no-duplicate-imports': 'error', // 不允许重复导入
      'prefer-arrow-callback': 'error', // 推荐使用箭头函数作为回调
      'arrow-spacing': 'error' // 箭头函数空格
    }
  },

  // 忽略文件
  {
    ignores: [
      'dist/**',
      'node_modules/**',
      '*.min.js',
      'public/**',
      'back/**'
    ]
  }
]
